home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / aplictns / hp11.2 < prev    next >
Internet Message Format  |  1989-11-13  |  62KB

  1. Path: xanth!ukma!tut.cis.ohio-state.edu!gem.mps.ohio-state.edu!wuarchive!texbell!texsun!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i199:  hp11 calculator emulator v1.01, Part02/03
  5. Message-ID: <127769@sun.Eng.Sun.COM>
  6. Date: 13 Nov 89 01:36:00 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1815
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: dg3i+@andrew.cmu.edu (David Gay)
  12. Posting-number: Volume 89, Issue 199
  13. Archive-name: applications/hp11.2
  14.  
  15. # This is a shell archive.
  16. # Remove anything above and including the cut line.
  17. # Then run the rest of the file through 'sh'.
  18. # Unpacked files will be owned by you and have default permissions.
  19. #----cut here-----cut here-----cut here-----cut here----#
  20. #!/bin/sh
  21. # shar: SHell ARchive
  22. # Run the following text through 'sh' to create:
  23. #    amiga/icon.c
  24. #    amiga/indic.c
  25. #    amiga/internal.h
  26. #    amiga/menus.c
  27. #    amiga/menus.h
  28. #    codes.h
  29. #    doc/hp11.doc
  30. #    doc/quick
  31. #    doc/compile.doc
  32. #    hp11.c
  33. #    hp11.debug
  34. #    hp11.h
  35. #    hp11.lnk
  36. #    hp11.pic.uu
  37. # This is archive 2 of a 3-part kit.
  38. # This archive created: Sun Nov 12 17:33:21 1989
  39. if `test ! -d amiga`
  40. then
  41.   mkdir amiga
  42.   echo "mkdir amiga"
  43. fi
  44. echo "extracting amiga/icon.c"
  45. sed 's/^X//' << \SHAR_EOF > amiga/icon.c
  46. X#include "exec/types.h"
  47. X#include "intuition/intuition.h"
  48. X#include "workbench/workbench.h"
  49. X
  50. Xextern UWORD off_image_data[];
  51. Xextern UWORD prog_image_data[];
  52. X
  53. Xstatic struct Image prog_image = {
  54. X   0, 0,
  55. X   53, 42, 2,
  56. X   prog_image_data,
  57. X   3, 0,
  58. X   NULL
  59. X};
  60. X
  61. Xstruct Image off_image = {
  62. X   0, 0,
  63. X   53, 42, 2,
  64. X   off_image_data,
  65. X   3, 0,
  66. X   NULL
  67. X};
  68. X
  69. Xstatic char *tool_types[] = {
  70. X   "FILETYPE=HP11",
  71. X   NULL
  72. X};
  73. X
  74. Xchar tool[120];
  75. X
  76. Xstruct DiskObject prog_icon = {
  77. X   WB_DISKMAGIC, WB_DISKVERSION,
  78. X   { /* gadget */
  79. X      NULL,
  80. X      0, 0,
  81. X      53, 43,
  82. X      5,
  83. X      3,
  84. X      1,
  85. X      (APTR)&prog_image,
  86. X      NULL
  87. X   },
  88. X   4,
  89. X   tool,
  90. X   tool_types,
  91. X   NO_ICON_POSITION, NO_ICON_POSITION,
  92. X   NULL,
  93. X   "",
  94. X   0
  95. X};
  96. X
  97. SHAR_EOF
  98. echo "extracting amiga/indic.c"
  99. sed 's/^X//' << \SHAR_EOF > amiga/indic.c
  100. X/* These are the structures which define the shape of the indicatos. The
  101. X  actual data is in indic_data.c (it is separate because it MUST reside in
  102. X  chip memory. */
  103. X#include "exec/types.h"
  104. X#include "intuition/intuition.h"
  105. X
  106. Xextern UWORD fData[], gData[], GData[], RADData[], PRGMData[], USERData[];
  107. X
  108. Xstruct Image fImage = {
  109. X   0, 0, /* Position */
  110. X   3, 6, 2, /* width, height, depth */
  111. X   fData, /* Shape data */
  112. X   0, 0, /* PlanePick, PlaneOnOff, defined by SetCol */
  113. X   NULL /* NextImage */
  114. X};
  115. X
  116. Xstruct Image gImage = {
  117. X   0, 1,
  118. X   4, 6, 2,
  119. X   gData,
  120. X   0, 0,
  121. X   NULL
  122. X};
  123. X
  124. Xstruct Image GImage = {
  125. X   0, 0,
  126. X   4, 6, 2,
  127. X   GData,
  128. X   0, 0,
  129. X   NULL
  130. X};
  131. X
  132. Xstruct Image RADImage = {
  133. X   0, 0,
  134. X   14, 6, 2,
  135. X   RADData,
  136. X   0, 0,
  137. X   NULL
  138. X};
  139. X
  140. Xstruct Image PRGMImage = {
  141. X   0, 0,
  142. X   19, 6, 2,
  143. X   PRGMData,
  144. X   0, 0,
  145. X   NULL
  146. X};
  147. X
  148. Xstruct Image USERImage = {
  149. X   0, 0,
  150. X   19, 6, 2,
  151. X   USERData,
  152. X   0, 0,
  153. X   NULL
  154. X};
  155. X
  156. SHAR_EOF
  157. echo "extracting amiga/internal.h"
  158. sed 's/^X//' << \SHAR_EOF > amiga/internal.h
  159. X/* Various informations for internal use by amiga specific routines */
  160. X#define HP11WIDTH 319 /* Drawing size */
  161. X#define HP11HEIGHT 181
  162. X#define HP11X 3 /* Position in window */
  163. X#define HP11Y 12
  164. X#define PATHLEN 100
  165. X
  166. Xextern struct Window *hp11; /* The window */
  167. Xextern struct Menu hp11menu[];
  168. Xextern char *hp11name;
  169. Xextern char hp11path[PATHLEN];
  170. Xvoid Message(char *);
  171. Xchar *mygetpath(char *, BPTR);
  172. X
  173. SHAR_EOF
  174. echo "extracting amiga/menus.c"
  175. sed 's/^X//' << \SHAR_EOF > amiga/menus.c
  176. Xchar message[] =
  177. X "HP11, by David Gay(86-87). You may freely copy & distribute this program.";
  178. Xchar message2[] =
  179. X "Vous pouvez librement copier & distribuer ce programme.";
  180. X#include "exec/types.h"
  181. X#include "graphics/text.h"
  182. X#include "intuition/intuition.h"
  183. X#include "workbench/workbench.h"
  184. X#include "workbench/startup.h"
  185. X#include "libraries/dos.h"
  186. X#include "libraries/arpbase.h"
  187. X#include "proto/arp.h"
  188. X#define NODOS
  189. X#include "libraries/arp_pragmas.h"
  190. X
  191. X#include "proto/exec.h"
  192. X#include "proto/graphics.h"
  193. X#include "proto/intuition.h"
  194. X#include "proto/icon.h"
  195. X#include "proto/dos.h"
  196. X
  197. X#include "string.h"
  198. X#include "math.h"
  199. X
  200. X#include "hp11/hp11.h"
  201. X#include "hp11/io.h"
  202. X#include "hp11/ins.h"
  203. X#include "hp11/amiga/menus.h"
  204. X#include "hp11/amiga/internal.h"
  205. X#include "hp11/amiga/cbio.h"
  206. X
  207. X#define PROJECTWIDTH (75 + COMMWIDTH) /* Width of Project menu options */
  208. X#define EDITWIDTH (65 + COMMWIDTH)
  209. X#define OPTIONSWIDTH 80
  210. X#define DECIMALWIDTH (CHECKWIDTH + 65 + COMMWIDTH)
  211. X#define SPEEDWIDTH (CHECKWIDTH + 55)
  212. X
  213. Xstatic struct TextAttr topaz9attr = { "topaz.font", 9, 0, 0 }; /* The text font desired */
  214. Xstatic struct TextFont *topaz9;
  215. X
  216. X/* Texts for menu options */
  217. Xstatic struct IntuiText hp11text[] = {
  218. X   { 2, 1, JAM1, 4, 1, NULL, "New", NULL },
  219. X   { 2, 1, JAM1, 4, 1, NULL, "Open", NULL },
  220. X   { 2, 1, JAM1, 4, 1, NULL, "Save", NULL },
  221. X   { 2, 1, JAM1, 4, 1, NULL, "Save as", NULL },
  222. X   { 2, 1, JAM1, 4, 1, NULL, "Print", NULL },
  223. X   { 2, 1, JAM1, 4, 1, NULL, "Quit", NULL },
  224. X   { 2, 1, JAM1, 4, 1, NULL, "Copy", NULL },
  225. X   { 2, 1, JAM1, 4, 1, NULL, "Paste", NULL },
  226. X   { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Radix", NULL },
  227. X      { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Point", NULL },
  228. X      { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Comma", NULL },
  229. X   { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Speed", NULL },
  230. X      { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Slow", NULL },
  231. X      { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Fast", NULL },
  232. X   { 2, 1, JAM1, CHECKWIDTH, 1, NULL, "Icons", NULL }
  233. X};
  234. X
  235. X/* The various menu items */
  236. Xstatic struct MenuItem hp11item[] = {
  237. X   { &hp11item[1], 0, 0, PROJECTWIDTH, 10, /* New */
  238. X     ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,
  239. X     (APTR)&hp11text[0], NULL, 0, NULL },
  240. X
  241. X   { &hp11item[2], 0, 10, PROJECTWIDTH, 10, /* Open */
  242. X     ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ, 0,
  243. X     (APTR)&hp11text[1], NULL, 'O', NULL },
  244. X
  245. X   { &hp11item[3], 0, 20, PROJECTWIDTH, 10, /* Save */
  246. X     ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,
  247. X     (APTR)&hp11text[2], NULL, 0, NULL },
  248. X
  249. X   { &hp11item[4], 0, 30, PROJECTWIDTH, 10, /* Save as */
  250. X     ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ,  0,
  251. X     (APTR)&hp11text[3], NULL, 'S', NULL },
  252. X
  253. X   { &hp11item[5], 0, 40, PROJECTWIDTH, 10, /* Print */
  254. X     ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,
  255. X     (APTR)&hp11text[4], 0, NULL },
  256. X
  257. X   { NULL, 0, 50, PROJECTWIDTH, 10, /* Quit */
  258. X     ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,
  259. X     (APTR)&hp11text[5], NULL, 0, NULL },
  260. X
  261. X
  262. X   { &hp11item[7], 0, 0, EDITWIDTH, 10, /* Copy */
  263. X     ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ, 0,
  264. X     (APTR)&hp11text[6], NULL, 'C', NULL },
  265. X
  266. X   { NULL, 0, 10, EDITWIDTH, 10, /* Paste */
  267. X     ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ, 0,
  268. X     (APTR)&hp11text[7], NULL, 'P', NULL },
  269. X
  270. X
  271. X   { &hp11item[11], 0, 0, OPTIONSWIDTH, 10, /* Radix */
  272. X     ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,
  273. X     (APTR)&hp11text[8], NULL, 0, &hp11item[9] },
  274. X
  275. X      { &hp11item[10], 50, 9, DECIMALWIDTH, 10, /* Point */
  276. X    ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED | COMMSEQ, 2,
  277. X    (APTR)&hp11text[9], NULL, '.', NULL },
  278. X
  279. X      { NULL, 50, 19, DECIMALWIDTH, 10, /* Comma */
  280. X    ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | COMMSEQ, 1,
  281. X    (APTR)&hp11text[10], NULL, ',', NULL },
  282. X
  283. X   { &hp11item[14], 0, 10, OPTIONSWIDTH, 10, /* Speed */
  284. X     ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,
  285. X     (APTR)&hp11text[11], NULL, 0, &hp11item[12] },
  286. X
  287. X      { &hp11item[13], 50, 9, SPEEDWIDTH, 10, /* Slow */
  288. X    ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, 2,
  289. X    (APTR)&hp11text[12], NULL, 0, NULL },
  290. X
  291. X      { NULL, 50, 19, SPEEDWIDTH, 10, /* Fast */
  292. X    ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, 1,
  293. X    (APTR)&hp11text[13], NULL, 0, NULL },
  294. X
  295. X   { NULL, 0, 20, SPEEDWIDTH, 10, /* Icons */
  296. X     ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, 0,
  297. X     (APTR)&hp11text[14], NULL, 0, NULL }
  298. X};
  299. X
  300. X/* The main menu options */
  301. Xstruct Menu hp11menu[] = {
  302. X   { &hp11menu[1], 0, 0, 80, 9, MENUENABLED, "Project", &hp11item[0] },
  303. X   { &hp11menu[2], 100, 0, 50, 9, MENUENABLED, "Edit", &hp11item[6] },
  304. X   { NULL, 170, 0, 80, 9, MENUENABLED, "Options", &hp11item[8] }
  305. X};
  306. X
  307. X/* state of Icons menu option */
  308. Xstatic BOOL icons_on = TRUE;
  309. X
  310. X/* filename for save & open, window title */
  311. Xstatic char filename[100], undo[100], winname[110];
  312. X
  313. X/* Structures for file requester */
  314. X/* ----------------------------- */
  315. X
  316. Xstatic WORD shadowvert[] = { /* Points for shadow of ok/cancel box  */
  317. X   2, 15,
  318. X   2, 17,
  319. X   82, 17,
  320. X   82, 1,
  321. X   80, 1
  322. X};
  323. Xstatic struct Border cancelshadow = { 0, 0, 2, 0, JAM1, 5, shadowvert, NULL };
  324. Xstatic WORD cancelvert[] = { /* Actual box */
  325. X   -1, -1,
  326. X   80, -1,
  327. X   80, 15,
  328. X   -1, 15,
  329. X   -1, -1
  330. X};
  331. X/* This defines a box with shadow 80 points wide */
  332. Xstatic struct Border cancelborder = { 0, 0, 2, 0, JAM1, 5, cancelvert, &cancelshadow };
  333. X
  334. X/* The cancel gadget */
  335. Xstatic struct IntuiText canceltext = { 2, 1, JAM1, 10, 4, &topaz9attr, "Cancel", NULL };
  336. Xstatic struct Gadget cancelgadget = {
  337. X   NULL,
  338. X   -100, -25, 80, 15, /* it is 100 points from the right, 25 points from
  339. X    the bottom & measures 80x15 */
  340. X   GADGHCOMP | GRELRIGHT | GRELBOTTOM,
  341. X   RELVERIFY | TOGGLESELECT | ENDGADGET,
  342. X   BOOLGADGET | REQGADGET,
  343. X   (APTR)&cancelborder,
  344. X   NULL,
  345. X   &canceltext
  346. X};
  347. X
  348. Xstatic WORD okvert[] = { /* Box thickening */
  349. X   0, 0,
  350. X   79, 0,
  351. X   79, 14,
  352. X   0, 14,
  353. X   0, 0
  354. X};
  355. Xstatic struct Border okborder = { 0, 0, 2, 0, JAM1, 5, okvert, &cancelborder };
  356. X
  357. X/* Ok gadget */
  358. Xstatic struct IntuiText oktext = { 2, 1, JAM1, 30, 4, &topaz9attr, "Ok", NULL };
  359. Xstatic struct Gadget okgadget = {
  360. X   &cancelgadget,
  361. X   20, -25, 80, 15,
  362. X   GADGHCOMP | GRELBOTTOM,
  363. X   RELVERIFY | TOGGLESELECT | ENDGADGET,
  364. X   BOOLGADGET | REQGADGET,
  365. X   (APTR)&okborder,
  366. X   NULL,
  367. X   &oktext
  368. X};
  369. X
  370. Xstatic WORD bluevert[] = {
  371. X   0, 8,
  372. X   199, 8
  373. X};
  374. Xstatic struct Border blueline = { 0, 0, 0, 0, JAM1, 2, bluevert, NULL };
  375. X
  376. Xstatic WORD namevert[] = { /* for filename box */
  377. X   -1, -1,
  378. X   200, -1,
  379. X   200, 9,
  380. X   -1, 9,
  381. X   -1, -1
  382. X};
  383. Xstatic struct Border nameborder = { 0, 0, 2, 0, JAM1, 5, namevert, &blueline };
  384. X
  385. Xstatic struct StringInfo nameinfo = {
  386. X   filename, undo,
  387. X   0, 100, 0
  388. X};
  389. X
  390. Xstatic struct IntuiText nametext = { 2, 1, JAM1, -55, 0, &topaz9attr, NULL, NULL };
  391. X
  392. X/* filename gadget */
  393. Xstatic struct Gadget namegadget = {
  394. X   &okgadget,
  395. X   62, 10, 200, 9,
  396. X   GADGHCOMP,
  397. X   ENDGADGET,
  398. X   STRGADGET | REQGADGET,
  399. X   (APTR)&nameborder,
  400. X   NULL,
  401. X   &nametext,
  402. X   0,
  403. X   (APTR)&nameinfo
  404. X};
  405. X
  406. Xstatic WORD filevert[] = { /* for the complete requester */
  407. X   0, 0,
  408. X   269, 0,
  409. X   269, 59,
  410. X   0, 59,
  411. X   0, 0
  412. X};
  413. Xstatic struct Border fileborder = { 0, 0, 2, 0, JAM1, 5, filevert, NULL };
  414. X
  415. X/* The actual requester */
  416. Xstatic struct Requester filereq = {
  417. X   NULL,
  418. X   25, 65,
  419. X   270, 60,
  420. X   0, 0,
  421. X   &namegadget,
  422. X   &fileborder,
  423. X   NULL,
  424. X   0,
  425. X   1
  426. X};
  427. X
  428. X/* Message requester */
  429. X/* ----------------- */
  430. Xstatic struct IntuiText msgtext = { 2, 1, JAM1, 10, 10, &topaz9attr, NULL, NULL };
  431. X
  432. Xstatic struct Gadget msgokgadget = {
  433. X   NULL,
  434. X   20, -25, 80, 15, /* Message inits LeftEdge */
  435. X   GADGHCOMP | GRELBOTTOM,
  436. X   RELVERIFY | TOGGLESELECT | ENDGADGET,
  437. X   BOOLGADGET | REQGADGET,
  438. X   (APTR)&okborder,
  439. X   NULL,
  440. X   &oktext
  441. X};
  442. X
  443. Xstatic WORD msgvert[][2] = {
  444. X   0, 0,
  445. X   0, 0,
  446. X   0, 59,
  447. X   0, 59,
  448. X   0, 0
  449. X};
  450. Xstatic struct Border msgborder = { 0, 0, 2, 0, JAM1, 5, msgvert, NULL };
  451. X
  452. Xstatic struct Requester msgreq = {
  453. X   NULL,
  454. X   0, 65, /* LeftEdge is initialised by Message */
  455. X   0, 60, /* Width also */
  456. X   0, 0,
  457. X   &msgokgadget,
  458. X   &msgborder,
  459. X   &msgtext,
  460. X   0,
  461. X   1
  462. X};
  463. X
  464. X/* struct DiskObject {
  465. X    int a;
  466. X};  Little problem: DiskObject def lost !!! */
  467. X
  468. Xstruct Library *IconBase; /* for the icon library */
  469. Xstruct ArpBase *ArpBase; /* Arp lib */
  470. Xextern char tool[]; /* Path to hp11 program */
  471. Xextern struct DiskObject prog_icon;
  472. Xstatic BOOL clip;
  473. X
  474. Xvoid LoadProg(void), OpenProg(void), StoreProg(void), SaveProg(void), Copy(void), Paste(void);
  475. X
  476. XBOOL MenusInit(argc, argv)
  477. Xint argc;
  478. XAPTR argv;
  479. X#define argw ((struct WBStartup *)argv)
  480. X#define arg1 (argw->sm_ArgList[1])
  481. X{
  482. X   char path[PATHLEN];
  483. X
  484. X   topaz9 = OpenFont(&topaz9attr); /* Open the desired font */
  485. X
  486. X   IconBase = OpenLibrary("icon.library", 0);
  487. X   if (!IconBase) { /* no icon library, disable icons */
  488. X      icons_on = FALSE;
  489. X      hp11item[14].Flags &= ~(CHECKED | ITEMENABLED);
  490. X   }
  491. X   ArpBase = OpenLibrary("arp.library", 0);
  492. X
  493. X   /* Set up tool path */
  494. X   strcat(strcpy(tool, hp11path), hp11name);
  495. X
  496. X   if (!(clip = !CBOpen(0))) /* Disable clip options if no clipboard */
  497. X      hp11menu[1].Flags = NULL;
  498. X
  499. X   SetMenuStrip(hp11, hp11menu);
  500. X
  501. X   if (argc != 0) { /* CLI */
  502. X      icons_on = FALSE;
  503. X      hp11item[14].Flags &= ~CHECKED; /* by default, no icons from cli */
  504. X      if (argc > 1) { /* argument */
  505. X     strcpy(filename, ((char **)argv)[1]);
  506. X     LoadProg();
  507. X      }
  508. X   }
  509. X   else if (argw->sm_NumArgs > 1) { /* workbench, with argument */
  510. X      if (!mygetpath(path, arg1.wa_Lock)) path[0] = '\0';
  511. X      strcpy(filename, strcat(path, arg1.wa_Name));
  512. X      LoadProg();
  513. X   }
  514. X   return(TRUE);
  515. X}
  516. X#undef arg1
  517. X#undef argw
  518. X
  519. Xvoid MenusCleanUp()
  520. X{
  521. X   if (hp11) ClearMenuStrip(hp11);
  522. X   if (clip) CBClose();
  523. X   if (ArpBase) CloseLibrary(ArpBase);
  524. X   if (IconBase) CloseLibrary(IconBase);
  525. X   if (topaz9) CloseFont(topaz9);
  526. X}
  527. X
  528. X/* Enable menus */
  529. Xvoid MenusOn(void)
  530. X{
  531. X   SetMenuStrip(hp11, hp11menu);
  532. X}
  533. X
  534. X/* Disable menus */
  535. Xvoid MenusOff(void)
  536. X{
  537. X   ClearMenuStrip(hp11);
  538. X}
  539. X
  540. Xvoid EditOn(void)
  541. X{
  542. X   if (clip) OnMenu(hp11, SHIFTMENU(1) | SHIFTITEM(NOITEM));
  543. X}
  544. X
  545. Xvoid EditOff(void)
  546. X{
  547. X   OffMenu(hp11, SHIFTMENU(1) | SHIFTITEM(NOITEM));
  548. X}
  549. X
  550. X/* The menu handler, number represents the chosen option */
  551. Xint MenuHandler(UWORD number)
  552. X{
  553. X   register struct MenuItem *item;
  554. X   register int key = -1;
  555. X
  556. X   MenusOff(); /* Disable menus */
  557. X
  558. X   while (number != MENUNULL) {
  559. X
  560. X      switch (MENUNUM(number)) {
  561. X     case 0: /* Project */
  562. X        switch (ITEMNUM(number)) {
  563. X           case 0: /* New */ HP11ColdReset(); key = BRESET; break; /* back to main loop */
  564. X           case 1: /* Open */ OpenProg(); key = BRESET; break;
  565. X           case 2: /* Save */ StoreProg(); break;
  566. X           case 3: /* Save as */ SaveProg(); break;
  567. X           case 4: /* Print */ break;
  568. X           case 5: /* Quit */ quit = TRUE; key = BRESET; break;
  569. X        }
  570. X        break;
  571. X     case 1: /* Edit */
  572. X        switch (ITEMNUM(number)) {
  573. X           case 0: /* Copy */ Copy(); break;
  574. X           case 1: /* Paste */ Paste(); key = BDISPLAY; break;
  575. X        }
  576. X        break;
  577. X     case 2: /* Options */
  578. X        switch (ITEMNUM(number)) {
  579. X           case 0: /* Radix */
  580. X          comma = SUBNUM(number); /* false for Point, true for Comma */
  581. X          key = BDISPLAY; /* Redisplay */
  582. X          break;
  583. X           case 1: /* Speed */
  584. X          fast = SUBNUM(number); /* false for Slow, true for Fast */
  585. X          break;
  586. X           case 2: /* Icons */
  587. X          icons_on = !icons_on;
  588. X
  589. X          /* Toggle flag */
  590. X          if (icons_on) hp11item[14].Flags |= CHECKED;
  591. X          else hp11item[14].Flags &= ~CHECKED;
  592. X
  593. X          break;
  594. X        }
  595. X        break;
  596. X      }
  597. X
  598. X      item = ItemAddress(hp11menu, (long)number);
  599. X      number = item->NextSelect;
  600. X   }
  601. X
  602. X   MenusOn();
  603. X   return(key);
  604. X}
  605. X
  606. X/* Display an error message */
  607. Xvoid Message(text)
  608. Xchar *text;
  609. X{
  610. X   register int width;
  611. X
  612. X   msgtext.IText = text;
  613. X   width = IntuiTextLength(&msgtext) + 20; /* width of requester */
  614. X   if (width < 100) width = 100; /* min width */
  615. X   msgokgadget.Flags &= ~SELECTED;
  616. X   msgreq.Width = width;
  617. X   msgreq.LeftEdge = (HP11WIDTH - width) >> 1; /* center rqeuester */
  618. X   msgokgadget.LeftEdge = (width >> 1) - 40; /* center OK */
  619. X   msgvert[1][0] = width - 1;
  620. X   msgvert[2][0] = width - 1;
  621. X
  622. X   Request(&msgreq, hp11);
  623. X}
  624. X
  625. X/* Read a file name, text is displayed to the left of the name box.
  626. X  Return FALSE if cancel selected, TRUE otherwise */
  627. Xstatic BOOL GetFile(char *text)
  628. X{
  629. X   ULONG saveIDCMP;
  630. X   struct IntuiMessage *msg;
  631. X   int done;
  632. X
  633. X   if (ArpBase) /* Use arp file req */
  634. X   {
  635. X      static char directory[DSIZE + 1];
  636. X      static struct FileRequester FR;
  637. X
  638. X      filename[0] = '\0';
  639. X      FR.fr_Hail = text;
  640. X      FR.fr_File = filename;
  641. X      FR.fr_Dir = directory;
  642. X
  643. X      if (FileRequest(&FR))
  644. X      {
  645. X      long lock = Lock(directory, SHARED_LOCK);
  646. X
  647. X      if (lock)
  648. X      {
  649. X          CurrentDir(lock);
  650. X          return TRUE;
  651. X      }
  652. X      }
  653. X      return FALSE;
  654. X   }
  655. X   else
  656. X   {
  657. X      nametext.IText = text;
  658. X      okgadget.Flags &= ~SELECTED;
  659. X      cancelgadget.Flags &= ~SELECTED;
  660. X
  661. X      saveIDCMP = hp11->IDCMPFlags;
  662. X      ModifyIDCMP(hp11, REQCLEAR | REQSET);
  663. X      Request(&filereq, hp11);
  664. X      do {
  665. X         WaitPort(hp11->UserPort); /* Wait for requester to appear */
  666. X     msg = GetMsg(hp11->UserPort);
  667. X     done = msg->Class == REQSET;
  668. X     ReplyMsg(msg);
  669. X      } while (!done);
  670. X
  671. X      ActivateGadget(&namegadget, hp11, &filereq);
  672. X
  673. X      do {
  674. X     WaitPort(hp11->UserPort); /* Wait for requester to disappear */
  675. X     msg = GetMsg(hp11->UserPort);
  676. X     done = msg->Class == REQCLEAR;
  677. X     ReplyMsg(msg);
  678. X      } while (!done);
  679. X
  680. X      ModifyIDCMP(hp11, saveIDCMP);
  681. X
  682. X      if (!(cancelgadget.Flags & SELECTED))
  683. X      {
  684. X     CurrentDir(DupLock(CurrentDir(0)));
  685. X     return TRUE;
  686. X      }
  687. X      else
  688. X     return FALSE;
  689. X   }
  690. X}
  691. X
  692. Xstatic void SetTitle(void)
  693. X{
  694. X   SetWindowTitles(hp11, strcat(strcpy(winname, "HP11C - "), filename), (char *)(long)-1);
  695. X}
  696. X
  697. Xstatic int FileType(struct DiskObject *icon, char *type)
  698. X{
  699. X   char *value;
  700. X
  701. X   if (!(value = FindToolType(icon->do_ToolTypes, "FILETYPE"))) return(FALSE);
  702. X   return((int)MatchToolValue(value, type));
  703. X}
  704. X
  705. Xstatic void LoadProg()
  706. X{
  707. X   LONG file;
  708. X   struct Regs newhp11;
  709. X   struct DiskObject *icon = NULL;
  710. X   BYTE dummy;
  711. X
  712. X   if (IconBase && (icon = GetDiskObject(filename)) &&
  713. X       !FileType(icon, "HP11")) {
  714. X      Message("This isn't an HP11 program");
  715. X      goto exit;
  716. X   }
  717. X
  718. X   if (file = Open(filename, MODE_OLDFILE)) {
  719. X      if ((Read(file, (char *)&newhp11, sizeof(struct Regs)) == sizeof(struct Regs))
  720. X      && (Read(file, &dummy, 1) != 1)) { /* dummy read to check file size */
  721. X        hp11r = newhp11; /* Set new internal state */
  722. X        running = FALSE; /* Interrupt program */
  723. X        PC = 0;
  724. X        retCnt = 0;
  725. X        ENABLE();
  726. X
  727. X        SetTitle();
  728. X     }
  729. X     else Message("This isn't an HP11 program");
  730. X      Close(file);
  731. X   }
  732. X   else Message("Couldn't open file");
  733. X
  734. Xexit: if (icon) FreeDiskObject(icon);
  735. X}
  736. X
  737. X/* Save current state under current filename */
  738. Xstatic void StoreProg()
  739. X{
  740. X   LONG file;
  741. X   struct DiskObject *temp_icon;
  742. X
  743. X   file = Open(filename, MODE_NEWFILE);
  744. X   if (!file) Message("Couldn't open file");
  745. X   else {
  746. X      if (Write(file, (char *)&hp11r, sizeof(struct Regs)) != sizeof(struct Regs))
  747. X     Message("Error writing the file");
  748. X      else {
  749. X     SetTitle();
  750. X     if (icons_on)
  751. X        if (!(temp_icon = GetDiskObject(filename)))
  752. X           PutDiskObject(filename, &prog_icon);
  753. X        else FreeDiskObject(temp_icon);
  754. X      }
  755. X      Close(file);
  756. X   }
  757. X}
  758. X
  759. X/* Save current state under a filename */
  760. Xstatic void SaveProg()
  761. X{
  762. X   BPTR cdir, new;
  763. X
  764. X   CurrentDir(cdir = CurrentDir(0));
  765. X
  766. X   if (GetFile("Save:"))
  767. X   {
  768. X      StoreProg();
  769. X      if (new = CurrentDir(cdir)) UnLock(new);
  770. X   }
  771. X}
  772. X
  773. X/* Load the hp11 state */
  774. Xstatic void OpenProg()
  775. X{
  776. X   BPTR cdir, new;
  777. X
  778. X   CurrentDir(cdir = CurrentDir(0));
  779. X
  780. X   if (GetFile("Open:")) /* Get file name */
  781. X   {
  782. X      LoadProg();
  783. X      if (new = CurrentDir(cdir)) UnLock(new);
  784. X   }
  785. X}
  786. X
  787. Xstatic void Copy()
  788. X{
  789. X   CBCut(NbStr(X));
  790. X}
  791. X
  792. Xstatic void Paste()
  793. X{
  794. X   char buf[256];
  795. X
  796. X   if (CBPaste(buf)) {
  797. X      Enter(); ENABLE();
  798. X      X = Check(atof(buf));
  799. X   }
  800. X}
  801. X
  802. SHAR_EOF
  803. echo "extracting amiga/menus.h"
  804. sed 's/^X//' << \SHAR_EOF > amiga/menus.h
  805. XBOOL MenusInit(int, APTR);
  806. Xvoid MenusCleanUp(void);
  807. Xint MenuHandler(UWORD number);
  808. SHAR_EOF
  809. echo "extracting codes.h"
  810. sed 's/^X//' << \SHAR_EOF > codes.h
  811. X/* Instruction codes */
  812. X
  813. X/* Unshifted codes */
  814. X#define KMAIN        (0)
  815. X#define KSQRT        (KMAIN + 0)
  816. X#define KEXP        (KMAIN + 1)
  817. X#define KEXP10        (KMAIN + 2)
  818. X#define KEXP_YX     (KMAIN + 3)
  819. X#define KINV        (KMAIN + 4)
  820. X#define KCHS        (KMAIN + 5)
  821. X#define KDIV        (KMAIN + 6)
  822. X#define KTRIG        (KMAIN + 7)
  823. X#define KEEX        (KMAIN + 10)
  824. X#define KMUL        (KMAIN + 11)
  825. X#define KR_S        (KMAIN + 12)
  826. X#define KRDN        (KMAIN + 13)
  827. X#define KEXG_XY     (KMAIN + 14)
  828. X#define KENTER        (KMAIN + 15)
  829. X#define KSUB        (KMAIN + 16)
  830. X#define KPOINT        (KMAIN + 17)
  831. X#define KSIGMA_PLUS    (KMAIN + 18)
  832. X#define KPLUS        (KMAIN + 19)
  833. X
  834. X/* f codes */
  835. X#define KF        (KMAIN + 20)
  836. X#define KPI        (KF + 0)
  837. X#define KX_LE_Y     (KF + 1)
  838. X#define KEXG_X_IND    (KF + 2)
  839. X#define KRECT        (KF + 3)
  840. X#define KEXG_XI     (KF + 4)
  841. X#define KDSE        (KF + 5)
  842. X#define KISG        (KF + 6)
  843. X#define KX_GT_Y     (KF + 7)
  844. X#define KPSE        (KF + 8)
  845. X#define KCLR_SIGMA    (KF + 9)
  846. X#define KCLR_REG    (KF + 10)
  847. X#define KRANDOM     (KF + 11)
  848. X#define KPERM        (KF + 12)
  849. X#define KHMS        (KF + 13)
  850. X#define KTO_RAD     (KF + 14)
  851. X#define KX_NE_Y     (KF + 15)
  852. X#define KFRAC        (KF + 16)
  853. X#define KFACT        (KF + 17)
  854. X#define KESTIMATE    (KF + 18)
  855. X#define KLR        (KF + 19)
  856. X#define KX_EQ_Y     (KF + 20)
  857. X
  858. X/* g codes */
  859. X#define KG        (KF + 21)
  860. X#define KSQR        (KG + 0)
  861. X#define KLN        (KG + 1)
  862. X#define KLOG        (KG + 2)
  863. X#define KPERC        (KG + 3)
  864. X#define KDELTA_PERC    (KG + 4)
  865. X#define KABS        (KG + 5)
  866. X#define KDEG        (KG + 6)
  867. X#define KRAD        (KG + 7)
  868. X#define KGRD        (KG + 8)
  869. X#define KX_LT_0     (KG + 9)
  870. X#define KARC        (KG + 10)
  871. X#define KPOLAR        (KG + 13)
  872. X#define KX_GT_0     (KG + 14)
  873. X#define KRTN        (KG + 15)
  874. X#define KRUP        (KG + 16)
  875. X#define KRND        (KG + 17)
  876. X#define KCLX        (KG + 18)
  877. X#define KLSTX        (KG + 19)
  878. X#define KCOMB        (KG + 20)
  879. X#define KHR        (KG + 21)
  880. X#define KTO_DEG     (KG + 22)
  881. X#define KX_NE_0     (KG + 23)
  882. X#define KINT        (KG + 24)
  883. X#define KMEAN        (KG + 25)
  884. X#define KSDEV        (KG + 26)
  885. X#define KSIGMA_SUB    (KG + 27)
  886. X#define KX_EQ_0     (KG + 28)
  887. X
  888. X/* Miscellaneous codes */
  889. X#define KSTO_RANDOM    (KG + 29)
  890. X#define KRCL_SIGMA    (KG + 30)
  891. X#define KHYP        (KG + 31)
  892. X#define KARCHYP     (KHYP + 3)
  893. X
  894. X/* Start of complex codes (dealt with differently in execution routine) */
  895. X#define KCOMPLEX    (KARCHYP + 3)
  896. X
  897. X/* Flags */
  898. X#define KFLAGS        (KCOMPLEX)
  899. X
  900. X/* Numeric codes */
  901. X#define KFIG        (KFLAGS + 6)
  902. X
  903. X/* display codes */
  904. X#define KFIX        (KFIG + 10)
  905. X#define KSCI        (KFIX + 10)
  906. X#define KENG        (KSCI + 8)
  907. X
  908. X/* GTO, GSB, LBL codes */
  909. X#define KLBL        (KENG + 8)
  910. X#define KGTO        (KLBL + 15)
  911. X#define KGSB        (KGTO + 16)
  912. X
  913. X/* STO & RCL codes */
  914. X#define KSTO        (KGSB + 16)
  915. X#define KRCL        (KSTO + 110)
  916. X
  917. X
  918. X/* Offsets used by various codes */
  919. X#define OSIN 0
  920. X#define OCOS 1
  921. X#define OTAN 2
  922. X#define OSF 0
  923. X#define OCF 2
  924. X#define OSET 4
  925. X#define OA 10
  926. X#define OB 11
  927. X#define OC 12
  928. X#define OD 13
  929. X#define OE 14
  930. X#define OIND_G 15
  931. X#define OI 20
  932. X#define OIND_R 21
  933. X#define OPLUS 22
  934. X#define OSUB 44
  935. X#define OMUL 66
  936. X#define ODIV 88
  937. X
  938. X
  939. X/* Immediate action codes */
  940. X#define ISST        0
  941. X#define ICLR_PRGM    1
  942. X#define ICLR_PREFIX    2
  943. X#define IUSER        3
  944. X#define IBST        4
  945. X#define IP_R        5
  946. X#define IMEM        6
  947. X#define ION        7
  948. X#define IBACK        8
  949. X#define IRESET        9
  950. X#define IDISPLAY    10
  951. X#define IGTO_LINE    100
  952. SHAR_EOF
  953. if `test ! -d doc`
  954. then
  955.   mkdir doc
  956.   echo "mkdir doc"
  957. fi
  958. echo "extracting doc/hp11.doc"
  959. sed 's/^X//' << \SHAR_EOF > doc/hp11.doc
  960. X              HP11C Calculator
  961. X              ================
  962. X
  963. XThis is version 1.01 (a few bug fixes & minor changes from the previous
  964. Xversion).
  965. X
  966. XThis program emulates an HP11C calculator. Everything is there, including
  967. Xthe program mode (with the instructions displayed as usual, as numbers
  968. X...). By default, it's even as slow. It is callable from Workbench or CLI.
  969. X
  970. XUsage
  971. X-----
  972. XYou can pass as argument a program to be loaded (not run): from CLI, type
  973. Xhp11 <name> (you must be in the directory containing the program, cf
  974. Xmiscellaneous), from the Workbench click on the program's icon, press &
  975. Xhold shift and double click on the hp11's icon.
  976. X
  977. XBasically, the program opens a window containing an image of an HP11C (it
  978. Xwill only look right if you use the standard workbench colours), it looks
  979. Xbest on an interlaced screen but will work in non-interlaced mode (however,
  980. Xthe image will be rather elongated). You select keys with the mouse or the
  981. Xkeyboard, the following keys are supported: 0..9,.,+,-,*,/,return (for
  982. Xenter), esc (for ON).
  983. X
  984. XThe ON key is treated specially: when you select it, the HP11C becomes an
  985. Xicon that you can move around with the mouse. To turn the calculator back
  986. Xon, double-click on the icon.
  987. X
  988. XThe following menu options are avalaible:
  989. X
  990. X   Project
  991. X      New        Clear HP11 memory (equivalent to ON -)
  992. X      Open      AO    Load an HP11 program
  993. X      Save        Save program under current name
  994. X      Save As      AS    Save program under a name
  995. X      Print        Print program -- unimplemented
  996. X      Quit        End program
  997. X
  998. X   Edit
  999. X      Copy      AC    Copy number in display to clipboard
  1000. X      Paste      AP    Enter clipboard as a number into X
  1001. X
  1002. X   Options
  1003. X      Radix
  1004. X     Point      A.    Select UK/USA format for numbers
  1005. X     Comma      A,    Select European format for numbers
  1006. X      Speed
  1007. X     Slow        Program's execute at HP11C speed
  1008. X     Fast        Program's execute faster ...
  1009. X      Icons        Save an icon with a program ? Default = Off when
  1010. X            called from CLI, on from Workbench
  1011. X
  1012. XFor more details (especially concerning HP11C programming), refer to HP's
  1013. Xmanual. (I didn't want to get sore fingers ...)
  1014. X
  1015. X
  1016. XMiscellaneous
  1017. X-------------
  1018. XPlease send all bug reports, suggestions for enhancements ... to me.
  1019. X
  1020. XThe format for Copy & Paste is not the same (alas ? if you disagree
  1021. Xstrongly, please send me a note): Copy essentially places an image of what
  1022. Xis on the display in the clipboard, thus 200*10^23 becomes 200.0000   23.
  1023. XPaste reads a number in the format +/-x.xE+/-x.
  1024. X
  1025. XThe ARP file requester is used if arp.library is present.
  1026. X
  1027. XThe program must be able to find the file HP11.PIC. It should be in the
  1028. Xsame directory as the executable file. However, if you run the program
  1029. Xfrom the CLI, you must either give an explicit path when you execute the
  1030. Xprogram (as in df1:hp11/hp11), or have the file hp11.pic in the current
  1031. Xdirectory. In other words, the program shouldn't be in your PATH
  1032. Xspecification (for instance in C:).
  1033. X
  1034. XThis program is placed in the public domain.
  1035. X
  1036. X
  1037. X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1038. XDavid Gay
  1039. X  "(p.suiv :=: q.prec.suiv).prec :=: q.prec"
  1040. X  You don't want to know about this language !
  1041. X
  1042. XGAY@ELMA.EPFL.CH, or GAY%ELMA.EPFL.CH@CLSEPF51.bitnet
  1043. X
  1044. X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1045. X
  1046. SHAR_EOF
  1047. echo "extracting doc/quick"
  1048. sed 's/^X//' << \SHAR_EOF > doc/quick
  1049. XThis is a very small tutorial for those who don't know how to use an HP11:
  1050. X
  1051. X- The HP11 uses RPN (Reverse Polish Notation), not conventional algebraic
  1052. X  notation. Calculations must thus be done by first entering the operands,
  1053. X  and then the operation. For example, to calculate:
  1054. X
  1055. X    5 + 3         you type       5 3 +
  1056. X    5 * (2 + 4)      you type      5 2 4 + *
  1057. X    2 * sin(0.5)     you type      0.5 sin 2 *
  1058. X
  1059. X- When you want to enter two numbers consecutively, you must separate them by
  1060. X  typing the ENTER key, the above will thus actually be
  1061. X
  1062. X    5 ENTER 3 +
  1063. X    5 ENTER 2 ENTER 4 + *
  1064. X    0.5 SIN 2 *          <- ENTER only necessary when entering two numbers
  1065. X
  1066. X- Intermediate results are saved on a stack, but as this is only 4 levels deep,
  1067. X  you must be slightly careful in which order you do the operations, as in:
  1068. X
  1069. X  ( 6 + 5) * (3 + 2 + 4 + 6)
  1070. X
  1071. X  if you try
  1072. X
  1073. X  6 ENTER 5 +    3 ENTER 2 ENTER 4 ENTER 6 + + +   *
  1074. X
  1075. X  you won't get the expected result, because the 11 (result of 6 5 +) will
  1076. X  have been lost. This is what happens (X, Y, Z, T are the names of the four
  1077. X  levels of the stack, the keys pressed are marked between the snapshots of
  1078. X  the stack) :
  1079. X
  1080. X     -------       -------     -------       -------     -------
  1081. X T   |       |       |     |     |     |       |     |     |     |
  1082. X     -------       -------     -------       -------     -------
  1083. X Z   |       |       |     |     |     |       |     |     |     |
  1084. X     -------  ENT  -------  5  -------    +  -------  3  -------    ENT
  1085. X Y   |       |       |  6  |     |  6  |       |     |     |  11 |
  1086. X     -------       -------     -------       -------     -------
  1087. X X   |    6  |       |  6  |     |  5  |       |  11 |     |  3  |
  1088. X     -------       -------     -------       -------     -------
  1089. X
  1090. X     -------       -------     -------       -------     -------
  1091. X T   |       |       |     |     |  11 |       |  11 |     |  3  |     <- 11 is lost
  1092. X     -------       -------     -------       -------     -------
  1093. X Z   | 11  |       | 11  |     |   3 |       |   3 |     |  2  |
  1094. X     -------   2   ------- ENT -------    4  ------- ENT -------     6
  1095. X Y   |    3  |       |  3  |     |   2 |       |   2 |     |  4  |
  1096. X     -------       -------     -------       -------     -------
  1097. X X   |    3  |       |  2  |     |   2 |       |   4 |     |  4  |
  1098. X     -------       -------     -------       -------     -------
  1099. X
  1100. X     -------       -------     -------       -------     -------
  1101. X T   |    3  |       |   3 |     |  3  |       |  3  |     |  3  |
  1102. X     -------       -------     -------       -------     -------
  1103. X Z   |    2  |       |   3 |     |  3  |       |  3  |     |  3  |
  1104. X     -------   +   -------  +  -------    +  -------  *  -------
  1105. X Y   |    4  |       |   2 |     |  3  |       |  3  |     |  3  |
  1106. X     -------       -------     -------       -------     -------
  1107. X X   |    6  |       |  10 |     | 12  |       | 15  |     | 45  |
  1108. X     -------       -------     -------       -------     -------
  1109. X
  1110. X
  1111. X   you get 45 instead of 165 ... You can notice here the effect of ENTER:
  1112. X   it duplicates the number in X into Y, but the next number entered will
  1113. X   overwrite it.
  1114. X
  1115. X   If you had done
  1116. X
  1117. X   3 ENTER 2 + 4 + 6 +     6 ENTER 5 + *
  1118. X
  1119. X   you would have got 165 as expected (it's also shorter to type it this
  1120. X   way ...). Note that in practice, this problem rarely arises.
  1121. X
  1122. X- Operations like sin, cos, hyperbolic sine (got by typing f HYP SIN) modify
  1123. X  the number in X.
  1124. X
  1125. X- There are 20 registers, accessible by RCL/STO 0-9 & RCL/STO . 0-9
  1126. X
  1127. X- You can choose the display mode with f FIX/SCI/ENG 0-9, and the angular
  1128. X  mode with g DEG/RAD/GRAD.
  1129. X
  1130. X- Statistics use registers 0 to 5 (clear them first with f CLEAR-Sigma).
  1131. X  Sigma-+ adds the X,Y pair, you can calculate the mean, sdev, linear
  1132. X  regression, estimation & correlation (these last two simultaneously).
  1133. X
  1134. XProgramming
  1135. X-----------
  1136. X
  1137. X- You enter or leave programming mode by typing g P/R.
  1138. X
  1139. X- You add instructions by typing them, remove them with <-, and you can move
  1140. X  around in the program with SST, g BST & GTO . xxx, where xxx is the
  1141. X  program step number.
  1142. X
  1143. X- Programs are composed of numbered steps, from 1 to 203. When a program is
  1144. X  run, these are normally executed sequentially.
  1145. X
  1146. X- Program steps are displayed as sequences of up to 3 pairs of 2 digits
  1147. X  (eventually with a . ) These numbers correspond to the keys pressed to
  1148. X  enter the instructions, with the keys numbered starting at 11 for
  1149. X  square root, 12 for e^x, ... 16 for CHS, 10 for /, 21 for SST, ...
  1150. X  Digits (0 to 9) are represented as themselves. Experiment ! You'll
  1151. X  remember them after a while (if you have the patience :-)).
  1152. X
  1153. X- Gotos: You can enter labels anywhere, with f LBL 0-9 or A-E. GTO 0-9, A-E
  1154. X  will transfer control to the step following the label.
  1155. X
  1156. X- Gosub: GSB 0-9, A-E will call the subroutine starting at the label, the
  1157. X  next RTN will return you to the step after the GSB. Subroutines can be
  1158. X  nested (upto four deep).
  1159. X
  1160. X- Tests: the instructions x =<>... 0/y compare X with 0 or Y. if the condition
  1161. X  is true, thew next step is executed, otherwise skipped (this step is often
  1162. X  a GTO).
  1163. X
  1164. X- Indirection: The special register I allows indirection. If I contains 5,
  1165. X  RCL/STO (i) is equivalent to RCL/STO 5,
  1166. X  GSB/GTO I   is equivalent to GTO/GSB 5
  1167. X  DSE & ISG drive you mad. Actually, if I = nnnnn.xxxyy
  1168. X
  1169. X  DSE will do : I = I - yy
  1170. X        if I <= xxx skip next step
  1171. X
  1172. X  ISG          : I = I + yy
  1173. X        if I > xxx skip next step
  1174. X
  1175. X  If yy = 0, 1 is used.
  1176. X
  1177. X- Programs are runb out of program mode, either by pressing R/S (program starts
  1178. X  at current step) (This will stop a program if it is running), or with
  1179. X  GSB 0-9,A-E which will start the program at the apropriate label.
  1180. X
  1181. XErrors
  1182. X------
  1183. XError 0 : division by 0, ln 0
  1184. XError 1 : Register overflow (when using STO+, STO*, ...)
  1185. XError 2 : Statistic error
  1186. XError 3 : No such register
  1187. XError 4 : No program memory left
  1188. XError 5 : Subroutines nested more than 4 deep
  1189. XError 6 : No such flag
  1190. X
  1191. X
  1192. XRemark
  1193. X------
  1194. X
  1195. XThere is a lot I haven't said (LastX, STO+-*/, lots of functions, etc, etc)
  1196. Xand certainly a few subtleties missed out. Experiment !
  1197. X
  1198. SHAR_EOF
  1199. echo "extracting doc/compile.doc"
  1200. sed 's/^X//' << \SHAR_EOF > doc/compile.doc
  1201. X- This program is written for Lattice C V5.02. It will need some work to
  1202. Xcompile under Manx (long ints, various library routines, prototypes, etc).
  1203. X
  1204. X- I've slightly modified my ARP include files, specifically, arp_pragmas.h
  1205. Xdoesn't replace the dos.library routines if NODOS is defined (add an
  1206. X#ifndef NODOS ... #endif around the pragmas from Open to Execute).
  1207. X
  1208. X- To compile & link, simply:
  1209. X
  1210. X    lmk    ; At last !
  1211. X
  1212. XIf you want to use CPR, execute
  1213. X
  1214. X    lmk -f lmkdebug
  1215. X
  1216. XI've had a few problems with CPR on this program, it may well crash ... Try
  1217. Xusing a different startup module if this happens.
  1218. X
  1219. X- mail me any questions, at
  1220. X
  1221. X  gay_d@elma.epfl.ch, or
  1222. X  gay_d%elma.epfl.ch@clsepf51.bitnet, or
  1223. X  gay_d%elma.epfl.ch@cunyvm.cuny.edu (not checked)
  1224. X
  1225. X  till the end of august.
  1226. X
  1227. XDavid Gay
  1228. X19 Chemin de la Source
  1229. X1296 Coppet
  1230. XVaud, Switzerland
  1231. X
  1232. XVoice: (22)-776 35 81
  1233. X
  1234. X
  1235. SHAR_EOF
  1236. echo "extracting hp11.c"
  1237. sed 's/^X//' << \SHAR_EOF > hp11.c
  1238. X#include "exec/types.h"
  1239. X#include "proto/dos.h"
  1240. X
  1241. X#include "hp11/hp11.h"
  1242. X#include "hp11/amiga/amiga.h"
  1243. X#include "hp11/io.h"
  1244. X#include "hp11/support.h"
  1245. X#include "hp11/ins.h"
  1246. X#include "hp11/codes.h"
  1247. X
  1248. X#include <stdlib.h>
  1249. X
  1250. X/* Values for Cback */
  1251. XLONG _stack = 4000;
  1252. Xchar *_procname = "HP11C";
  1253. XLONG _BackGroundIO = 0;
  1254. XLONG _priority = 0;
  1255. X
  1256. Xstruct Regs hp11r;
  1257. Xint running, fast, error, skip;
  1258. Xint PC, retStack[MAXSTACK], retCnt;
  1259. Xint Flags;
  1260. X
  1261. Xint quit, on = TRUE; /* Set to false to quit */
  1262. X
  1263. Xstatic void ExecAction(int act) /* Execute an Action in normal mode */
  1264. X{
  1265. X   if (act >= IGTO_LINE) { /* GTO .nnn where act = IGTO_LINE + nnn */
  1266. X      entering = FALSE; /* Digit entry disabled */
  1267. X      GTOLine(act - IGTO_LINE);
  1268. X   }
  1269. X   else switch (act) {
  1270. X      case ISST: SST(); break;
  1271. X      case IBST: BST(); break;
  1272. X      case IP_R: ProgramEntry(); break;
  1273. X      case IUSER: USER(); break;
  1274. X      case ICLR_PRGM: RTN(); break; /* Clear Prgm = RTN() in normal mode */
  1275. X      case ION: on = !RelKey(); break; /* Allow user to change his mind */
  1276. X      case IMEM: MEM(); break;
  1277. X      case ICLR_PREFIX: PREFIX(); break;
  1278. X      case IBACK:if (entering) EnterNum(-IBACK); /* Correct during digit entry */
  1279. X         else CLX();
  1280. X         break;
  1281. X   }
  1282. X}
  1283. X
  1284. Xvoid ExecIns(ins) /* Execute an instruction (normal or run mode) */
  1285. Xregister int ins;
  1286. X{
  1287. X   skip = FALSE;
  1288. X
  1289. X   if (ins < KCOMPLEX) (*insfunc[ins])(); /* miscellaneous ins */
  1290. X   else if (ins < KFLAGS + OCF) SF(ins - (KFLAGS + OSF));
  1291. X   else if (ins < KFLAGS + OSET) SF(ins - (KFLAGS + OSF));
  1292. X   else if (ins < KFIG) SF(ins - (KFLAGS + OSF));
  1293. X   else if (ins < KFIX) EnterNum(ins);
  1294. X   else if (ins < KSCI) FIX(ins - KFIX);
  1295. X   else if (ins < KENG) SCI(ins - KSCI);
  1296. X   else if (ins < KLBL) ENG(ins - KENG);
  1297. X   else if (ins < KGTO) ENABLE() /* LBL : ignore, just enable stack */;
  1298. X   else if (ins < KGSB) GTO(ins - KGTO);
  1299. X   else if (ins < KSTO) GSB(ins - KGSB);
  1300. X   else if (ins < KRCL) STO((ins - KSTO) % OPLUS,
  1301. X                (enum StoTypes)((ins - KSTO) / OPLUS));
  1302. X      /* compute type of operation to do : there are 21 regs per operation,
  1303. X     + indirect, the codes are sequential : all the stos, all the pluses ...
  1304. X     PLUS is first so it is 22, hence the division to determine the operation */
  1305. X   else if (ins < KRCL + 22) RCL(ins - KRCL);
  1306. X
  1307. X   X = Check(X); Y = Check(Y); /* Check the values in X & Y to conform to HP11
  1308. X      limits. The testing is done here to save code space so that all the instructions
  1309. X      don't have to include the check */
  1310. X}
  1311. X
  1312. Xstatic BOOL Init(int argc, APTR argv) /* Initialize the calculator, return FALSE if it fails */
  1313. X{
  1314. X   DEG(); /* Initial state, all other values are zero */
  1315. X   FIX(4);
  1316. X
  1317. X   /* Computer specific intialisation, can load an initial program */
  1318. X   return(AmigaInit(argc, argv));
  1319. X}
  1320. X
  1321. Xstatic void CleanUp(void)
  1322. X{
  1323. X   AmigaCleanUp();
  1324. X}
  1325. X
  1326. X/* Standard version of sleep */
  1327. X/* On Amiga, iconifies (special routine in amiga.c */
  1328. X/* static void sleep()
  1329. X{
  1330. X   int key;
  1331. X
  1332. X   Display("");
  1333. X
  1334. X   while (!quit && !on) {
  1335. X      key = PollKey(TRUE);
  1336. X      RelKey();
  1337. X      on = key == 30 (* ON *), replace ( with / if you uncomment this;
  1338. X   }
  1339. X} */
  1340. X
  1341. Xvoid main(int argc, char **argv)
  1342. X{
  1343. X   WORD code;
  1344. X   enum KeyTypes type;
  1345. X
  1346. X   if (Init(argc, (APTR)argv))
  1347. X      do { /* while (!quit) */
  1348. X     while (on && !quit) { /* Exit when calculator turned off */
  1349. X        Disp();
  1350. X        error = FALSE; overflow = FALSE;
  1351. X
  1352. X        if (running) { /* Run mode */
  1353. X           if (PollKey(FALSE) != -1) { /* User pressed a key */
  1354. X          running = FALSE;
  1355. X          RelKey(); /* Wait for him to release it */
  1356. X           }
  1357. X           else {
  1358. X          if (!fast) Wait50(2L); /* Slow calculator down to make it more realistic (wait 2/50 s) */
  1359. X          ExecIns(Prog[PC]); /* Exec current ins */
  1360. X          if (error || overflow) running = FALSE; /* An error occured, halt */
  1361. X          else {
  1362. X             if (skip) PC++; /* A conditional instruction asked for the next
  1363. X            instruction to be skipped */
  1364. X             PC++;
  1365. X             while (PC > lastIns) { /* There is an implicit return at the end of the program */
  1366. X            RTN();
  1367. X            PC++;
  1368. X             }
  1369. X          }
  1370. X           }
  1371. X        }
  1372. X        else { /* normal mode operation */
  1373. X           MenusOn();
  1374. X           EditOn();
  1375. X           type = ReadKey(&code);
  1376. X           EditOff();
  1377. X           switch (type) { /* Read an instruction/action */
  1378. X          case Action:
  1379. X             ExecAction(code); /* Execute corresponding action */
  1380. X             break;
  1381. X          case Instruction:
  1382. X             ExecIns(code); /* Interpret instruction */
  1383. X             break;
  1384. X           }
  1385. X           MenusOff();
  1386. X           RelKey();
  1387. X        }
  1388. X
  1389. X     }
  1390. X
  1391. X     if (!quit) {
  1392. X        sleep(); /* Wait till woken up */
  1393. X        ENABLE();
  1394. X     }
  1395. X      } while (!quit);
  1396. X
  1397. X   CleanUp();
  1398. X}
  1399. X
  1400. SHAR_EOF
  1401. echo "extracting hp11.debug"
  1402. sed 's/^X//' << \SHAR_EOF > hp11.debug
  1403. XFROM LIB:catch.o,HP11:od/chars.o,HP11:od/indic.o,HP11:od/chip.o,HP11:od/icon.o,*
  1404. X     LIB:cbio.o,HP11:od/menus.o,HP11:od/amiga.o,HP11:od/kbd.o,HP11:od/io.o,*
  1405. X     HP11:od/prog_codes.o,HP11:od/hp11.o,HP11:od/ins.o,*
  1406. X     HP11:od/support.o
  1407. XDEFINE @_main=@_tinymain
  1408. XLIBRARY lib:lcmr.lib,lib:lcr.lib,lib:amiga.lib
  1409. XTO hp11
  1410. XBATCH
  1411. XVERBOSE
  1412. XADDSYM
  1413. XPLAIN
  1414. XSWIDTH 16
  1415. XHWIDTH 16
  1416. Xsc
  1417. Xsd
  1418. XMAP ram:hp11.map,h,x
  1419. SHAR_EOF
  1420. echo "extracting hp11.h"
  1421. sed 's/^X//' << \SHAR_EOF > hp11.h
  1422. X#define MAXPROG 203 /* Max number of instructions */
  1423. X#define MAXSTACK 4 /* The stack is 4 levels deep */
  1424. X
  1425. X/* 2 pseudo-keys, which don't exist on the keyboard. They are used to force
  1426. X  certain actions, and are generated by certain menu functions */
  1427. X#define BRESET 40 /* Return to main program loop. Generated by New, Quit, Open */
  1428. X#define BDISPLAY 41 /* Redisplay. Generated by Paste, Radix */
  1429. X
  1430. X#define NUMKEYS 42
  1431. X
  1432. Xenum KeyTypes {Action, Instruction, Prefix, Invalid};
  1433. X   /* Keyboard sequence are of 2 types: Actions & Instructions. The other types
  1434. X     are for internal use in the keyboard routines. Instructions can  be incorporated
  1435. X     into programs, while actions are immediately acted upon (eg enter program mode). */
  1436. X
  1437. Xstruct Regs { /* The status of the HP11. This can be saved */
  1438. X   double r[20]; /* The 20 storage registers */
  1439. X   double x,y,z,t,l,i; /* The stack & the indirection register */
  1440. X   enum {fix, sci, eng} mode; /* display mode */
  1441. X   double _minfix; /* 10^-Digits in fixed mode to determine smallest displayable value */
  1442. X   enum {deg, rad, grad} angles; /* Trigonometric mode */
  1443. X   int digits; /* Number of digits for display mode */
  1444. X   int user; /* User mode flags */
  1445. X   WORD prog[MAXPROG + 1]; /* The program */
  1446. X   int lastins; /* Last instruction used */
  1447. X};
  1448. X
  1449. Xextern struct Regs hp11r; /* the current internal state */
  1450. Xextern int on, quit, running, fast, error, skip; /* various flags indicating the run mode ... */
  1451. Xextern int PC, retStack[MAXSTACK], retCnt; /* PC & return stack (4 levels) */
  1452. Xextern int Flags; /* the current flags */
  1453. X
  1454. X/* Defines to easily access components of internal state */
  1455. X#define X (hp11r.x)
  1456. X#define Y (hp11r.y)
  1457. X#define Z (hp11r.z)
  1458. X#define T (hp11r.t)
  1459. X#define L (hp11r.l)
  1460. X#define I (hp11r.i)
  1461. X#define R (hp11r.r)
  1462. X#define Mode (hp11r.mode)
  1463. X#define Angles (hp11r.angles)
  1464. X#define Digits (hp11r.digits)
  1465. X#define User (hp11r.user)
  1466. X#define Prog (hp11r.prog)
  1467. X#define lastIns (hp11r.lastins)
  1468. X#define minfix (hp11r._minfix)
  1469. X
  1470. Xextern void ExecIns(int);
  1471. X
  1472. SHAR_EOF
  1473. echo "extracting hp11.lnk"
  1474. sed 's/^X//' << \SHAR_EOF > hp11.lnk
  1475. XFROM LIB:cback.o,HP11:o/chars.o,HP11:o/indic.o,HP11:o/chip.o,HP11:o/icon.o,*
  1476. X     LIB:cbio.o,HP11:o/menus.o,HP11:o/amiga.o,HP11:o/kbd.o,HP11:o/io.o,*
  1477. X     HP11:o/prog_codes.o,HP11:o/hp11.o,HP11:o/ins.o,*
  1478. X     HP11:o/support.o
  1479. XDEFINE @_main=@_tinymain
  1480. XLIBRARY lib:lcmr.lib,lib:lcr.lib,lib:lc.lib,lib:amiga.lib
  1481. XTO hp11
  1482. XBATCH
  1483. XVERBOSE
  1484. XNODEBUG
  1485. XPLAIN
  1486. XSWIDTH 16
  1487. XHWIDTH 16
  1488. XMAP ram:hp11.map,h,x
  1489. Xsc
  1490. X
  1491. X
  1492. SHAR_EOF
  1493. echo "extracting hp11.pic.uu"
  1494. sed 's/^X//' << \SHAR_EOF > hp11.pic.uu
  1495. X
  1496. Xbegin 644 hp11.pic
  1497. XM_____________________________________________________H-55555N
  1498. XM5555555555555555555555555555555555555555555558*#JJJJJJJJJJJJ)
  1499. XMJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJN"@U555555555555555555N
  1500. XM55555555555555555555555555555555@H.JJJJJJJJJJJJJJJJJJJJJJJJJ;
  1501. XMJJJJJJJJJJJJJJJJJJJJJJJJJX*#55555555555555555555555555555555<
  1502. XM5555555555555555556"@ZJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJM
  1503. XMJJJJJJJJJJJK@H-555555555555555555555555555555555555555555555*
  1504. XM555558*#JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJN"8
  1505. XM@U555555___________________________]5555555555555555@H.JJJJJ^
  1506. XMJ____________________________JJJJJJJJJJJJJJJJX*#555555?\````Z
  1507. XM`````````````````````?]5555555555555556"@ZJJJJJK^```````````,
  1508. XM``````````````#^JJJJJJJJJH````JK@H-555555_@`````````````````!
  1509. XM````````_U555555554````%58*#JJJJJJOX````````````````````````\
  1510. XM`/ZJJJJJJJJJC_K_RJN"@U555557^`````````````````````````#_5555'
  1511. XM555550_Z/\55@H.JJJJJJ_@`````````````````````````_JJJJJJJJJJ/Y
  1512. XMY`_*JX*#555555?X`````````````````````````/]555555555#^0/Q56"`
  1513. XM@ZJJJJJK^`````````````````````````#^JJJJJJJJJH_*Y\JK@H-55555`
  1514. XM5_@`````````````````````````_U555555554/RI?%58*#JJJJJJOX````[
  1515. XM`````````````````````/ZJJJJJJJJJC\JGRJN"@U555557^```````````!
  1516. XM``````````````#_5555555550_AS\55@H.JJJJJJ_@`````````````````[
  1517. XM````````_JJJJJJJJJJ/X0_*JX*#555555?X`````````````````````````
  1518. XM`/]555555555#_D_Q56"@ZJJJJJK^`````````````````````````#^JJJJ_
  1519. XMJJJJJH_]?\JK@H-555555_@`````````````````````````_U555555554`B
  1520. XM```%58*#JJJJJJOX`````````````````````````/ZJJJJJJJJJC___RJN"2
  1521. XM@U555557^`````````````````````````#_5555555550XXX<55@H.JJJJJF
  1522. XMJ_@`````````````````````````_JJJJJJJJJJ,,,#*JX*#555555?X````@
  1523. XM`````````````````````/]555555555#SS/Q56"@ZJJJJJK^```````````6
  1524. XM``````````````#^JJJJJJJJJH\\P,JK@H-555555_@`````````````````,
  1525. XM````````_U555555554//.'%58*#JJJJJJOX````````````````````````H
  1526. XM`/ZJJJJJJJJJC___RJN"@U555557^`````````````````````````#_5555,
  1527. XM555550````55@H.JJJJJJ_@`````````````````````````_JJJJJJJJJJ`B
  1528. XM```*JX*#555555?X`````````````````````````/]5555555555555556":
  1529. XM@ZJJJJJK^`````````````````````````#^JJJJJJJJJJJJJJJK@H-55555>
  1530. XM5_P````````````````````````!_U5555555555555558*#JJJJJJO_____C
  1531. XM______________________ZJJJJJJJJJJJJJJJN"@U555555____________,
  1532. XM_______________]5555555555555555@H.JJJJJJJJJJJJJJJJJJJJJJJJJ1
  1533. XMJJJJJJJJJJJJJJJJJJJJJJJJJX*#55555555555555555555555555555555<
  1534. XM5555555555555555556"@ZJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJM
  1535. XMJJJJJJJJJJJK@H-555555555555555555555555555555555555555555555*
  1536. XM555558*#JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJN"8
  1537. XM@U55555555555555555555555555555555555555555555555555@H.JJJJJ.
  1538. XMJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJX*"````````````9
  1539. XM``````````````````````````````````````""@@``````````````````$
  1540. XM````````````````````````````````@H(`````````````````````````$
  1541. XM`````````````````````````(*"````````````````````````````````$
  1542. XM``````````````````""@G______________________________________G
  1543. XM___________\@H)_____________________________________________6
  1544. XM_____(*"8`````````````````````````````````````````````````R"K
  1545. XM@F`````````````````````````````````````````````````,@H)@`!P`N
  1546. XM``#@```'````.````>```!\```\D0``<Y``#TF```!2`#(*"8``B````D```]
  1547. XM"(```"0```$````*```((H``(10``AJ0`"1B@`R"@F``(@```.````@````DF
  1548. XM```!X```"@``#R$``!D$``/6@``8@8`,@H)@`#X```"0```(@```)````0``5
  1549. XM``H```@B@``%%``"$K``&&"`#(*"8``B````X```!P```#@```'@```*```(M
  1550. XM)$``..0``])@`"21``R"@F``````````````````````````````````````:
  1551. XM````````8@`,@H)@'__^`/__\`?__X`___P!___@#___`'__^`/__\`?__X`:
  1552. XM___P#(*"8!```@"`"A`$`"B`(`4$`00`(`@``0!```@"``!`$``"`(``$`R"'
  1553. XM@F`0?\(`@`00!"80@"$B!`$,$"`(R3D`0/@(`@'`0!`<`@"`8!`,@H)@$$!"R
  1554. XM`('*$`1I*(`A)00!!"`@"2E!`$`0"`("($`0(@(`@``0#(*"8!%*`@""(!`$U
  1555. XM*0"`(.`$`01`(`D/,0!`(`@"`<!`$!X"`('X$`R"@F`0A`(`@\`0!"D`@"`@%
  1556. XM!`$$BB`)*0D`0$`(`@(@0!`"`@"``!`,@H)@$(H"`((`$`0F`(`A(`0!`00@Q
  1557. XM",EQ`$!`"`(!P$`0/`(`@&`0#(*"8!```@"!P!`$``"`(,`$`0`*(`@``0!`Z
  1558. XM``@"``!`$``"`(``$`R"@F`?__X`___P!___@#___`'__^`/__\`?__X`___(
  1559. XMP!___@#___`,@H)@$`&"`(0D$`2#&(`@P@0!"&(@",XY`$YYB`)QG$`1G.(`1
  1560. XM@!$0#(*"8!`"0@"$-!`$A*"`(,0$`11D(`DI00!)0D@"2E)`$E*2`))BD`R""
  1561. XM@F`02((`A"P0!(2L@"`(!`$4""`)+C$`27H(`G)20!(<D@",@I`,@H)@$#'"C
  1562. XM`(0D$`2$I(`@$P0!(A,@">D)`$E"R`)+TD`2TI(`C(*0#(*"8!`P`@"'I!`$C
  1563. XM\QB`(",$`3XC(`DN<0!.>8@"2EQ`$9+B`))A$`R"@F`02`(`@``0!```@"``Y
  1564. XM!`$``"`(``$`0``(`@``0!```@"`$!`,@H)@#__\`'__X`/__P`?__@`___`7
  1565. XM!__^`#__\`'__X`/__P`?__@#(*"8```````````````````````````````)
  1566. XM``````````````````R"@F``````````````````````````````````````P
  1567. XM```````````,@H)@````````````````````````````````````````````P
  1568. XM````#(*"8`````````````````````````````````````````````````R"^
  1569. XM@F`````````````````````````````````````````````````,@H)@````2
  1570. XM````````$0``(@``````````````````````````````#(*"8```````````C
  1571. XM`B2``$D```````````````````````````````R"@F`"'(``$HN``E\@@`!!<
  1572. XM```!P````X```!'``''>``$YP```0D`,@H)@`A*``!)20`&")(``20```(``X
  1573. XM`!)``!+X@`!*$``!0B``$C%`#(*"8`(<@``>(X`!@"2``$D```"```#[@``,@
  1574. XM$(``2=X``3(```P(P`R"@F`"$H``$B(``D@D@`!)````@```$D``#$"``$A0C
  1575. XM``$*8``,"(`,@H)@`]SP`!(B```?%0``*@```<````)``!+YP`!SG@`!<<``A
  1576. XM$C$`#(*"8```````````"```````````````````0`````````````!"``R"+
  1577. XM@F`?__X`___P!___@#___`'__^`/__\`?__X`___P!___@#___`,@H)@$``":
  1578. XM`(``$`0``(`@``0!```@"``!`$``"`(``$`0``(`@``0#(*"8!'.X@".<Q`$4
  1579. XM>22`(QCD`3F1(`GO10!`"`@"`\!`$`X"`(&8$`R"@F`2$$(`D220!($T@"2E=
  1580. XM!`$262`)""D`0!@(`@(`0!`0`@"`\!`,@H)@$8Q"`)`DD`1Q+(`D),0!$E4@8
  1581. XM">\1`$`H"`(#@$`0'`(`@&`0#(*"8!!"0@"3))`$"22`)*0D`1/3(`D(*0!`%
  1582. XM?`@"`$!`$!("`(#P$`R"@F`3G$(`CB,0!/$D@",9Q`$242`)[T4`0`@(`@.`[
  1583. XM0!`,`@"!F!`,@H)@$``"`(``$`0``(`@``0!```@"``!`$``"`(``$`0``(`'
  1584. XM@``0#(*"8!___@#___`'__^`/__\`?__X`___P!___@#___`'__^`/__\`R"$
  1585. XM@F`3CN(`JK!0!'4B@"(C%`%R2*`(`<$`0=X(`@SP0!!YP@"`01`,@H)@$E!"]
  1586. XM`*JK4`2%JH`E5%0!)6J@"`DA`$(0"`(2@$`00$(`DC*0#(*"8!.,0@"Y,%`$I
  1587. XM96*`)%(4`258H`A]P0!!G@@"$/!`$'F"`(P*D`R"@F`20D(`J2`0!!4@@"51=
  1588. XM!`$G2"`("0$`0%`(`A*`0!!!`@","I`,@H)@$YQ"`*D@$`3E((`B)@0!)4@@H
  1589. XM"`$!`$.0"`(,@$`00`(`DC$0#(*"8!```@"``!`$``"`(``$`0``(`@``0!`\
  1590. XM``@"``!`$`$"`(!`$`R"@F`/__P`?__@`___`!__^`#__\`'__X`/__P`?__+
  1591. XM@`___`!__^`,@H)@````````````````````````````````````````````8
  1592. XM````#(*"8`````````````D<F`````````````````````````````````R"[
  1593. XM@F`````````````5$50````````````````````````````````,@H)@````,
  1594. XM!_______D1U8_______\````````````````````````#(*"8`````0`````S
  1595. XM`!41U```````!`````````````````````````R"@F`````$```````)W50`L
  1596. XM``````0````````````````````````,@H)@````!``````````````````$\
  1597. XM````````````````````````#(*"8`..\``!\``!F)(`!SS``S.ZH`<22@`.1
  1598. XM````%$F``'$X```B0`R"@F`"4(```)```55>``2A(`*J(D`$JU\`"5%``)1ZW
  1599. XM``)*I``E^4`,@H)@`XSP``!```&9$@`'/0`#,[I`!RK*``XP@`/<20`/<J0`C
  1600. XM&$#`#(*"8`("@```D``!%=(`!*%@`BHB0`2Z7P`()4``E$B``DND`!GX@`R"-
  1601. XM@F`"'/```?```122``2\P`(KHJ`$JDH`"$@``!5+``!*N``D@0`,@H)@````V
  1602. XM``````````````````````````"```````````````(`#(*"8!___@#___`'#
  1603. XM__^`/__\`?__X`___P!___@#___`'__^`/__\`R"@F`0``(`@``0!```@"``;
  1604. XM!`$``"`(``$`0``(`@``0!```@"``!`,@H)@$X)R`(QW$`0X8(`E"20!`0`@T
  1605. XM"``!`$`0"`(#@$`0'`(`@``0#(*"8!)$@@"2A)`$)&"`)7RD`0,`(`@``0!`,
  1606. XM,`@"`$!`$`("`(``$`R"@F`3A&(`D&<0!#A@@"((9`$'^"`('P$`0!`(`@"`:
  1607. XM0!`<`@"!^!`,@H)@$D@2`)84D`0D\(`E(20!`P`@"!`!`$`0"`(!`$`0`@(`[
  1608. XM@``0#(*"8!)(X@",YQ`$)&"`)7S$`0$`(`@?`0!`$`@"`\!`$!P"`(``$`R"?
  1609. XM@F`0``(`@``0!```@"`@!`$``"`($`$`0``(`@``0!```@"``!`,@H)@'__^^
  1610. XM`/__\`?__X`___P!___@"!\!`'__^`/__\`?__X`___P#(*"8!.$X@"<Z)`$V
  1611. XM.&"`)R7$`1D(H`@``0!&``@"`)!`$&<R`(`0D`R"@F`22)(`DDR0!"3P@"2U7
  1612. XM)`$E!2`($0$`25%(`@200!)42@"2_5`,@H)@$XCB`)Q*D`0X8(`G+20!(0(@+
  1613. XM"!D!`$@PB`(^\$`?5T(`C"%0#(*"8!(0D@"229`$)&"`)*4D`24%(`@5`0!)]
  1614. XM)4@"!)!`$E1:`(S]4`R"@F`2$)(`DDB0!"1@@"2EQ`$9Z*`($P$`1D@(`@"0E
  1615. XM0!!G,@"20)`,@H)@$``"`(``$`0``(`@``0!```@"!$!`$"`"`(``$`0``(`<
  1616. XM@``0#(*"8`___`!__^`#__\`'__X`/__P`@``0`___`!__^`#__\`'__X`R"I
  1617. XM@F`````````````````````````('P$````````````````````,@H)@````Z
  1618. XM````````````````````"`0!````````````````````#(*"8```````````]
  1619. XM``````````````@$`0````````````````````R"@F``````````````````]
  1620. XM```````(!`$````````````````````,@H)@````````````````````````]
  1621. XM"`0!```````<````````````#(*"8`````````````````````````@``0``B
  1622. XM````(@````````````R"@F`````````````````````````('P$```(`````\
  1623. XM```````````,@H)@```````````````=Q&``IWN`"!`!```"```2(``"!P``I
  1624. XM``)`#(*"8```````````````$2J0`*A"0`@?`0`!(@``"AP``@2``!+Y0`R"W
  1625. XM@F```````````````!W*@`"F>X`($`$``,(```80``('```,`,`,@H)@````@
  1626. XM```````````1+I``H4)`"!\!``#````$4``"!(``#/B`#(*"8```````````H
  1627. XM````$2I@`$YZ0`@``0`!(@``")```]2@`!(!``R"@F``````````````````A
  1628. XM```````('@$``````!```````````@`,@H)@#__\`/__\`?__X`___P!___@_
  1629. XM"!$!`'__^`/__\`?__X`___P#(*"8!```@#___`$``"`(``$`0``(`@>`0!`[
  1630. XM``@"``!`$``"`(``$`R"@F`0``(`_Y_P!```@".YQ`$XR"`($@$`0'`(`@``6
  1631. XM0!#X@@"`(!`,@H)@$.(B`/\/\`0``(`D$B0!)2@@"!$!`$"("`(``$`02((`.
  1632. XM@"`0#(*"8!$3(@#_/_`$``"`(Q(D`3D((`@``0!`B`@"`8!`$"/B`(#X$`R":
  1633. XM@F`1$J(`_A_P!```@""2)`$E*"`(``$`0(@(`@&`0!!(@@"`(!`,@H)@$1*B7
  1634. XM`/\_\`0``(`G$<0!),\@"``!`$!P"`(``$`0^((`@"`0#(*"8!$28@#_/_`$F
  1635. XM``"`(``$`0``(`@``0!```@"``!`$``"`(``$`R"@F`1$B(`___P!_C_@#__9
  1636. XM_`'__^`/__\`?__X`___P!___@#___`,@H)@$1(B`/__\`0``(`B1<0!)>D@J
  1637. XM"AW5`$!X"`(!P$`0^`(`@`$0#(*"8!$2(@#___`$``"`(F2$`3T/(`H@B0!`K
  1638. XM``@"`@!`$$@"`)+ZD`R"@F`0XB(`___P!```@")4A`$EZ2`*&(D`0$@(`@&`?
  1639. XM0!`CX@",`I`,@H)@$``"`/__\`0``(`B3(0!)0D@"@2)`$`P"`(`0$`02`(`3
  1640. XMC/J0#(*"8!```@#___`$``"`(D2$`27I(`NXE0!`,`@"`X!`$/@"`)(!$`R"S
  1641. XM@F`0``(`___P!```@"``!`$``"`(``$`0$@(`@``0!```@"``!`,@H)@#__\B
  1642. XM`'__X`/__P`?__@`___`!__^`#__\`'__X`/__P`?__@#(*"8```````````\
  1643. XM``````````````````````````````````````R"@F``````````````````P
  1644. XM```````````````````````````````,@H)@````````````````````````P
  1645. XM````````````````````````#(*"8```````````````````````````````P
  1646. XM``````````````````R"@F``````````````````````````````````````P
  1647. XM```````````,@H)P`````````````````````````````````````````````
  1648. XM````'(*"?_Q"?))`^?/@#PX<1''CP_____________________________R"T
  1649. XM@G_\0D"20(!`@`B1(DB)$B/____________________________\@H)__$)`Z
  1650. XMDD"`0(`(D2!0B1(C_____________________________(*"?_Q^?%1`^$"`%
  1651. XM#Q$@8(GB(_____________________________R"@G_\0D!40(!`@`@?(%#YZ
  1652. XM(B/____________________________\@H)__$)`5$"`0(`($2)(B1(C_____
  1653. XM_________________________(*"/_Q"?"A\^$"`"!$<1(D3P___________3
  1654. XM__________________B"@@``````````````````````````````````````O
  1655. XM````````````@H(`````````````````````````````````````````````$
  1656. XM`````(*"``````````````````````````````````````````````````""&
  1657. XM_____________________________________________________@``````7
  1658. XM``````````````````````````````````````````````!\JJJJJJJJJJJJV
  1659. XMJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJI\?%555555555555555555@
  1660. XM55555555555555555555555555555554?'RJJJJJJJJJJJJJJJJJJJJJJJJJ-
  1661. XMJJJJJJJJJJJJJJJJJJJJJJJJJGQ\55555555555555555555555555555555.
  1662. XM5555555555555555551\?*JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ?
  1663. XMJJJJJJJJJJJJ?'Q555555555555555555555555555555555555555555555\
  1664. XM55555'Q\JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJI\#
  1665. XM?%55555555555555555555555555555555555555555555555554?'RJJJJJY
  1666. XMJ@```````````````````````````JJJJJJJJJJJJJJJJGQ\5555550`````$
  1667. XM``````````````````````%5555555555555551\?*JJJJJH`____________
  1668. XM______________X`JJJJJJJJJJJJJJJJ?'Q555555`?_________________&
  1669. XM________`5555555555____U5'Q\JJJJJJ@'________________________1
  1670. XM_P"JJJJJJJJJ____^JI\?%555554!_________________________\!5555:
  1671. XM555557`%`#54?'RJJJJJJ`?_________________________`*JJJJJJJJKPD
  1672. XM!<`ZJGQ\5555550'_________________________P%555555555<!OP-51\1
  1673. XM?*JJJJJH!_________________________\`JJJJJJJJJO`;\#JJ?'Q555551
  1674. XM5`?_________________________`5555555555P-1@U5'Q\JJJJJJ@'____N
  1675. XM_____________________P"JJJJJJJJJ\#5H.JI\?%555554!___________F
  1676. XM______________\!5555555557`U6#54?'RJJJJJJ`?_________________1
  1677. XM________`*JJJJJJJJKP'C`ZJGQ\5555550'________________________7
  1678. XM_P%555555555<![P-51\?*JJJJJH!_________________________\`JJJJ4
  1679. XMJJJJJO`&P#JJ?'Q555555`?_________________________`5555555555P:
  1680. XM`H`U5'Q\JJJJJJ@'_________________________P"JJJJJJJJJ____^JI\*
  1681. XM?%555554!_________________________\!5555555557```#54?'RJJJJJ%
  1682. XMJ`?_________________________`*JJJJJJJJKQQQXZJGQ\5555550'____@
  1683. XM_____________________P%555555555<\\_-51\?*JJJJJH!___________5
  1684. XM______________\`JJJJJJJJJO##,#JJ?'Q555555`?_________________\
  1685. XM________`5555555555PPS\U5'Q\JJJJJJ@'________________________&
  1686. XM_P"JJJJJJJJJ\,,>.JI\?%555554!_________________________\!5555N
  1687. XM555557```#54?'RJJJJJJ`?_________________________`*JJJJJJJJK_N
  1688. XM___ZJGQ\5555550'_________________________P%555555555?___]51\,
  1689. XM?*JJJJJH!_________________________\`JJJJJJJJJJJJJJJJ?'Q55555$
  1690. XM5`?_________________________`5555555555555555'Q\JJJJJJ@#____,
  1691. XM_____________________@"JJJJJJJJJJJJJJJI\?%555554````````````'
  1692. XM```````````````!5555555555555554?'RJJJJJJ@``````````````````&
  1693. XM`````````JJJJJJJJJJJJJJJJGQ\55555555555555555555555555555555J
  1694. XM5555555555555555551\?*JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ?
  1695. XMJJJJJJJJJJJJ?'Q555555555555555555555555555555555555555555555\
  1696. XM55555'Q\JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJI\#
  1697. XM?%55555555555555555555555555555555555555555555555554?'RJJJJJY
  1698. XMJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJGQ\555555555555)
  1699. XM555555555555555555555555555555555555551\??__________________+
  1700. XM________________________________?'W_________________________.
  1701. XM_________________________WQ]________________________________.
  1702. XM__________________]\??______________________________________.
  1703. XM____________?'V`````````````````````````````````````````````P
  1704. XM`````WQ]@`````````````````````````````````````````````````-\[
  1705. XM?9_________________________________________________S?'V?____`
  1706. XM____________________________________________\WQ]G___________B
  1707. XM______________________________________-\?9__________________B
  1708. XM_______________________________S?'V?________________________B
  1709. XM________________________\WQ]G_______________________________B
  1710. XM__________________-\?9______________________________________B
  1711. XM___________S?'V?____________________________________________B
  1712. XM____\WQ]G^```?\```_X``!_P``#_@``'_```/^```?\```_X``!_P`0#_-\M
  1713. XM?9_O__W_?_7O^__7?]_Z^_[[_]_W__[_O__W_?__O^___?]__^_S?'V?[X`]4
  1714. XM_W_[[_O9[W_>W?O^\^_?]S;&_[\']_W^/[_OX_W_?Y_O\WQ]G^^_O?]^->_[T
  1715. XMEM=_WMK[_OO?W_;6OO^_[_?]_=^_[]W]_W__[_-\?9_NM?W_?=_O^];_?]\?3
  1716. XM^_[[O]_V\,[_O]_W_?X_O^_A_?]^!^_S?'V?[WO]_WP_[_O6_W_?W_O^^W7?#
  1717. XM]M;V_[^_]_W]W[_O_?W_?__O\WQ]G^]U_?]]_^_[V?]_WM_[_O[[W_<VCO^_2
  1718. XMO_?]_C^_[\/]_W^?[_-\?9_O__W_?C_O^___?]\_^_[_]=_W__[_O__W_?__0
  1719. XMO^___?]__^_S?'V?X``!_P``#_@``'_```/^```?\```_X``!_P``#_@``'_X
  1720. XM```/\WQ]G^```?\```_X``!_P``#_@``'_```/^```?\```_X``!_P``#_-\O
  1721. XM?9_@``'_```/^```?\```_X``!_P``#_@``'_```/^```?\```_S?'V?X``!N
  1722. XM_P``#_@``'_```/^```?\```_X``!_P``#_@``'_```/\WQ]G^```?\```_XW
  1723. XM``!_P``#_@``'_```/^```?\```_X``!_P``#_-\?9_@``'_```/^```?\``P
  1724. XM`_X``!_P``#_@``'_```/^```?\```_S?'V?X``!_P``#_@``'_```/^```?1
  1725. XM\```_X``!_P``#_@``'_```/\WQ]G_```_^``!_\``#_X``'_P``/_@``?_`4
  1726. XM``_^``!_\``#_X``'_-\?9______________________________________,
  1727. XM___________S?'V?____________________________________________B
  1728. XM____\WQ]G_________________________________________________-\3
  1729. XM?9_________________________________________________S?'V?____`
  1730. XM____________________________________________\WQ]G___________B
  1731. XM______________________________________-\?9__________________B
  1732. XM_______________________________S?'V?________________________B
  1733. XM________________________\WQ]G_______________________________B
  1734. XM__________________-\?9______________________________________B
  1735. XM___________S?'V?____________________________________________B
  1736. XM____\WQ]G_________________________________________________-\3
  1737. XM?9_________________________________________________S?'V?X``!D
  1738. XM_P``#_@``'_```/^```?\```_X``!_P``#_@``'_```/\WQ]G^___?]__^_[B
  1739. XM__]_W__[_O__W_?__O^___?]__^_[__]_W__[_-\?9_N,1W_<8SO^X;;?]SGZ
  1740. XM&_[&;M_V$+K_O_?W_?P_O^_Q_?]^9^_S?'V?[>^]_V[;;_M^RW_;6OO^[:;?]
  1741. XM]O?6_[_G]_W]_[_O[_W_?P_O\WQ]G^YSO?]OVV_[CM-_V]L[_NVJW_80[O^_!
  1742. XMU_?]_'^_[^/]_W^?[_-\?9_OO;W_;-MO^_;;?]M;V_[L+-_V]];_OX/W_?^_0
  1743. XMO^_M_?]_#^_S?'V?[&.]_W'<[_L.VW_<YCO^[:[?]A"Z_[_W]_W\?[_O\_W__
  1744. XM?F?O\WQ]G^___?]__^_[__]_W__[_O__W_?__O^___?]__^_[__]_W__[_-\*
  1745. XM?9_@``'_```/^```?\```_X``!_P``#_@``'_```/^```?\```_S?'V?X``!N
  1746. XM_P``#_@``'_```/^```?\```_X``!_P``#_@``'_```/\WQ]G^```?\```_XW
  1747. XM``!_P``#_@``'_```/^```?\```_X``!_P``#_-\?9_@``'_```/^```?\``P
  1748. XM`_X``!_P``#_@``'_```/^```?\```_S?'V?X``!_P``#_@``'_```/^```?1
  1749. XM\```_X``!_P``#_@``'_```/\WQ]G^```?\```_X``!_P``#_@``'_```/^`@
  1750. XM``?\```_X``!_P``#_-\?9_@``'_```/^```?\```_X``!_P``#_@``'_```T
  1751. XM/^```?\```_S?'V?\``#_X``'_P``/_@``?_```_^``!_\``#_X``'_P``/_@
  1752. XM@``?\WQ]G_________________________________________________-\U
  1753. XM?9_________________________________________________S?'V?____`
  1754. XM____________________________________________\WQ]G___________B
  1755. XM______________________________________-\?9__________________B
  1756. XM_______________________________S?'V?________________________B
  1757. XM________________________\WQ]G_______________________________B
  1758. XM__________________-\?9______________________________________B
  1759. XM___________S?'V?____________________________________________B
  1760. XM____\WQ]G_________________________________________________-\3
  1761. XM?9_________________________________________________S?'V?____`
  1762. XM____________________________________________\WQ]G___________B
  1763. XM______________________________________-\?9_@``'_```/^```?\``5
  1764. XM`_X``!_P``#_@``'_```/^```?\```_S?'V?[__]_W__[_O__W_?__O^___?.
  1765. XM]__^_[__]_W__[_O__W_?__O\WQ]G^Q]C?]SB._[QY]_VO;;_O[_W_?__O^_Z
  1766. XM[_?]_'^_[^/]_W__[_-\?9_MNWW_;7MO^]N??]J#6_[\_]_W__[_O\_W_?^_5
  1767. XMO^_]_?]__^_S?'V?['N=_V^8[_O'GW_=]YO^^`??]^#^_[_O]_W_?[_OX_W_$
  1768. XM?@?O\WQ]G^VW[?]IZV_[VP]_VM[;_OS_W_?O_O^_[_?]_O^_[_W]_W__[_-\F
  1769. XM?9_MMQW_<QCO^]N??]J#._[^_]_WX/[_O^_W_?P_O^_C_?]__^_S?'V?[__]=
  1770. XM_W__[_O__W_?W_O^___?]^_^_[__]_W__[_O__W_?__O\WQ]G^```?\```_X3
  1771. XM``!_P``#_@``'_?@_O^```?\```_X``!_P``#_-\?9_@``'_```/^```?\``5
  1772. XM`_X``!_W__[_@``'_```/^```?\```_S?'V?X``!_P``#_@``'_```/^```?5
  1773. XM]^[^_X``!_P``#_@``'_```/\WQ]G^```?\```_X``!_P``#_@``'_?F_O^`^
  1774. XM``?\```_X``!_P``#_-\?9_@``'_```/^```?\```_X``!_WZO[_@``'_```C
  1775. XM/^```?\```_S?'V?X``!_P``#_@``'_```/^```?]^S^_X``!_P``#_@``'_!
  1776. XM```/\WQ]G^```?\```_X``!_P``#_@``'_?N_O^```?\```_X``!_P``#_-\B
  1777. XM?9_P``/_@``?_```_^``!_\``#_W__[_P``/_@``?_```_^``!_S?'V?____E
  1778. XM____________________]^#^____________________\WQ]G___________Z
  1779. XM______________?[_O____________________-\?9__________________5
  1780. XM_______W^_[____________________S?'V?________________________5
  1781. XM]_O^____________________\WQ]G_________________________?[_O__(
  1782. XM__________________-\?9_________________________W__[_________9
  1783. XM___________S?'V?________________________]^#^________________Z
  1784. XM____\WQ]G_________________________?O_O____________________-\Z
  1785. XM?9_________________________WX/[____________________S?'V?____8
  1786. XM____________________]^_^____________________\WQ]G___________)
  1787. XM______________?@_O____________________-\?9__________________Z
  1788. XM_______W__[____________________S?'V?________________________9
  1789. XM]^'^____________________\WQ]G_```_\```_X``!_P``#_@``'_?N_O^`,
  1790. XM``?\```_X``!_P``#_-\?9_O__W_?__O^`:`?]__^_[__]_WX?[_O__W_?__)
  1791. XMO^___?]__^_S?'V?[__]_W__[_@/@'_<1CO^QS??]^W^_[^/]_W__[_O!WW_(
  1792. XM?]_O\WQ]G^\=W?]__^_X#8!_V^W;_MK7W_?N_O^_=_?]__^_[[=]_W_?[_-\)
  1793. XM?9_N[-W_?__O^`^`?]SMV_[&]]_W__[_OW?W_?Y_O^_<'?]_!^_S?'V?[NU=[
  1794. XM_W__[_@'@'_?;=O^VM??]__^_[]W]_W^?[_OMWW_?]_O\WQ]G^[M7?]__^_X.
  1795. XM`8!_V.X[_MLPW_?__O^_C_?]__^_[P=]_W_?[_-\?9_N[9W_?__O^`^`?]__M
  1796. XM^_[__]_W__[_O__W_?__O^___?]__^_S?'V?[NW=_P``#_@'`'_```/^```?^
  1797. XM\```_X``!_P``#_@``'_```/\WQ]G^[MW?]__^_X``!_P``#_@``'_```/^`5
  1798. XM``?\```_X``!_P``#_-\?9_N[=W_?__O^```?\```_X``!_P``#_@``'_```I
  1799. XM/^```?\```_S?'V?[QW=_W__[_@``'_```/^```?\```_X``!_P``#_@``'_V
  1800. XM```/\WQ]G^___?]__^_X``!_P``#_@``'_```/^```?\```_X``!_P``#_-\7
  1801. XM?9_O__W_?__O^```?\```_X``!_P``#_@``'_```/^```?\```_S?'V?[__]@
  1802. XM_W__[_@``'_```/^```?\```_X``!_P``#_@``'_```/\WQ]G_```_^``!_\[
  1803. XM``#_X``'_P``/_@``?_```_^``!_\``#_X``'_-\?9__________________W
  1804. XM_______________________________S?'V?________________________B
  1805. XM________________________\WQ]G_______________________________B
  1806. XM__________________-\?9______________________________________B
  1807. XM___________S?'V?____________________________________________B
  1808. XM____\WQ]C________________________________________________^-\S
  1809. XM?8`#O8-MOP8,'_#QX[N.'#P````````````````````````````#?'V``[V_]
  1810. XM;;]_OW_W;MVW=NW<`````````````````````````````WQ]@`.]OVV_?[]_%
  1811. XM]V[?KW;MW`````````````````````````````-\?8`#@8.KOP>_?_#NWY]VV
  1812. XM'=P````````````````````````````#?'V``[V_J[]_OW_WX-^O!MW<````_
  1813. XM`````````````````````````WQ]@`.]OZN_?[]_]^[=MW;MW```````````:
  1814. XM``````````````````-\?<`#O8/7@P>_?_?NX[MV[#P`````````````````_
  1815. XM```````````'?'W_____________________________________________>
  1816. XM_____WQ]__________________________________________________]\+
  1817. XM??__________________________________________________?```````3
  1818. XC``````````````````````````````````````````````#__
  1819. X``
  1820. Xend
  1821. Xsize 14480
  1822. SHAR_EOF
  1823. echo "End of archive 2 (of 3)"
  1824. # if you want to concatenate archives, remove anything after this line
  1825. exit
  1826.